package com.stdspringboot.service.impl;

import com.stdspringboot.entity.Account;
import com.stdspringboot.mapper.IAccountMapper;
import com.stdspringboot.service.ITransferService;
import com.stdspringboot.vo.JsonResult;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

@Service
public class TransferSrvImpl implements ITransferService {

    @Resource
    private IAccountMapper mapper;

    //要么所有的操作都成功，才提交到数据库，数据库才保存
    //如果有一个操作失败，那么数据就回滚到初始状态

    // 当抛出运行时异常，会触发回滚机制
    // 默认，当抛出非运行时异常（检查异常），不会触发回滚机制
    @Transactional(rollbackFor = {RuntimeException.class,Exception.class}) //修改该方法，说明只有该方法才有事务管理
    public JsonResult transfer() throws FileNotFoundException {

        //从马云账户转出10元
        Account mayunAcc=new Account();
        mayunAcc.setAid(1);
        //浮点类型的默认类型是double
        mayunAcc.setMoney(90.0);
        mapper.transfer(mayunAcc);

        //测试抛出非运行时异常，事务注解是否能回滚
        InputStream is=new FileInputStream("asoedifaosdf");
        //故意报个错误
//        int i=1/0; // 模拟报错，转成金额成功，在转入金额之前报错

        //将10元钱转入到李雷账户
        Account lileiAcc=new Account();
        lileiAcc.setAid(2);
        lileiAcc.setMoney(20.0);
        mapper.transfer(lileiAcc);

        return null;
    }
}
